# RVC Controller SW — Use Case Diagram

| 항목 | 내용 |
|------|------|
| 문서 번호 | RVC-UCD-001 |
| 버전 | v1.1 |
| 작성일 | 2026-05-19 |
| 작성자 | OOAD Team |
| 상태 | 초안 (Draft) |

---

## 변경 이력 (Change History)

| 버전 | 날짜 | 변경 내용 | 작성자 |
|------|------|-----------|--------|
| v1.0 | 2026-05-19 | 최초 작성 | OOAD Team |
| v1.1 | 2026-05-19 | PNG 이미지 삽입 | OOAD Team |

---

## 1. Use Case Diagram (PlantUML)

> **렌더링 방법:** VS Code의 PlantUML 확장(jebbs.plantuml) 또는 [plantuml.com](https://www.plantuml.com/plantuml/uml/) 에 코드를 붙여넣어 확인

```plantuml
@startuml RVC_UseCaseDiagram

skinparam packageStyle rectangle
skinparam usecase {
  BackgroundColor #FFFDE7
  BorderColor #5D4037
  FontSize 11
}
skinparam actor {
  BackgroundColor #E3F2FD
  BorderColor #1565C0
  FontSize 11
}
skinparam arrow {
  Color #424242
}

title RVC Controller SW — Use Case Diagram

' ── Actors ──────────────────────────────────────────
actor "Obstacle\nSensor" as OS
actor "Dust\nSensor"     as DS

' ── System Boundary ──────────────────────────────────
rectangle "RVC Controller SW" {

  usecase "UC-01\nPerform Normal\nCleaning"          as UC01
  usecase "UC-02\nDetect Obstacle\n(Front)"          as UC02
  usecase "UC-03\nAvoid Front\nObstacle"             as UC03
  usecase "UC-04\nDetect Obstacle\n(Left & Right)"   as UC04
  usecase "UC-05\nAvoid All-Direction\nObstacle"     as UC05
  usecase "UC-06\nDetect Dust"                       as UC06
  usecase "UC-07\nBoost Cleaning\nPower"             as UC07
  usecase "UC-08\nHandle Sensor\nError"              as UC08

}

' ── Actor Associations ────────────────────────────────
OS --> UC02
OS --> UC04
OS --> UC08

DS --> UC06
DS --> UC08

' ── <<extend>> : 조건 충족 시 기본 UC에 행위 추가 ────────
' (화살표 방향: 확장 UC → 기본 UC)
UC03 .> UC01 : <<extend>>
UC05 .> UC01 : <<extend>>
UC07 .> UC01 : <<extend>>

' ── <<include>> : 기본 UC가 항상 포함하는 UC ──────────────
' (화살표 방향: 기본 UC → 포함 UC)
UC03 .> UC02 : <<include>>
UC03 .> UC04 : <<include>>

UC05 .> UC02 : <<include>>
UC05 .> UC04 : <<include>>

UC07 .> UC06 : <<include>>

@enduml
```

![Use Case Diagram](diagrams/use_case_diagram.png)

---

## 2. 관계 설명

### Actors

| Actor | 역할 |
|-------|------|
| **Obstacle Sensor** | 전방·좌·우 장애물 감지 데이터를 Controller에 전달하는 외부 입력 |
| **Dust Sensor** | 먼지 감지 데이터를 Controller에 전달하는 외부 입력 |

> RVC는 완전 자율 시스템이므로 Human Actor 없음. 센서가 유일한 외부 Actor.

---

### <<extend>> 관계

| 확장 UC | 기본 UC | 확장 조건 |
|---------|---------|-----------|
| UC-03 Avoid Front Obstacle | UC-01 Perform Normal Cleaning | 전방 장애물 감지 시 |
| UC-05 Avoid All-Direction Obstacle | UC-01 Perform Normal Cleaning | 전·좌·우 모두 장애물 감지 시 |
| UC-07 Boost Cleaning Power | UC-01 Perform Normal Cleaning | 먼지 감지 시 |

> `<<extend>>`: 조건이 충족될 때만 기본 UC의 흐름에 행위가 추가됨  
> 화살표 방향: **확장 UC → 기본 UC**

---

### <<include>> 관계

| 기본 UC | 포함 UC | 의미 |
|---------|---------|------|
| UC-03 Avoid Front Obstacle | UC-02 Detect Obstacle (Front) | 회피 전 반드시 전방 감지 수행 |
| UC-03 Avoid Front Obstacle | UC-04 Detect Obstacle (Left & Right) | 회전 방향 결정을 위해 좌·우 감지 수행 |
| UC-05 Avoid All-Direction Obstacle | UC-02 Detect Obstacle (Front) | 전방 감지 포함 |
| UC-05 Avoid All-Direction Obstacle | UC-04 Detect Obstacle (Left & Right) | 좌·우 감지 포함 |
| UC-07 Boost Cleaning Power | UC-06 Detect Dust | 파워 증가 전 반드시 먼지 감지 수행 |

> `<<include>>`: 기본 UC 실행 시 항상 포함 UC가 실행됨  
> 화살표 방향: **기본 UC → 포함 UC**

---

## 3. 다이어그램 구조 요약 (ASCII)

```
  [Obstacle Sensor]              [Dust Sensor]
       |    |    |                   |    |
       |    |    +---> (UC-08 Handle Sensor Error)
       |    |                        |
       v    v                        v
  (UC-02) (UC-04)               (UC-06)
     ^  ^    ^ ^                   ^
     |  |    | |                   |
  <<include>>  <<include>>     <<include>>
     |  |    | |                   |
  (UC-03)  (UC-05)             (UC-07)
     |         |                   |
  <<extend>> <<extend>>        <<extend>>
     |         |                   |
     +----+----+-------------------+
          |
     (UC-01 Perform Normal Cleaning)  ← 기본 Use Case
```
